package com.warm.base.design.b_template;

/**
 * @Date: 2019/11/21 13:46
 * @Author: LChuang
 * @Description: 模板方法(行为型)
 *
 *      定义一个操作中的算法的骨架，而将一些步骤延迟到子类中。
 *      TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
 *      (RedisTemplate, JdbcTemplate...)
 *
 *  优点:
 *      封装不变，扩展可变：父类封装了具体流程以及实现部分不变行为，其它可变行为交由子类进行具体实现；
 *      流程由父类控制，子类进行实现：框架流程由父类限定，子类无法更改；子类可以针对流程某些步骤进行具体实现；
 *  缺点:
 *      抽象规定了行为，具体负责实现，与通常事物的行为相反，会带来理解上的困难（通俗地说，“父类调用了子类方法”）；
 *
 */
public class Client {

    /**
     * 抽象模板（AbstractClass）：抽象模板类，定义了一套算法框架/流程；
     * 具体实现（ConcreteClass）：具体实现类，对算法框架/流程的某些步骤进行了实现；
     */
    public static void main(String[] args) {
        AbstractClass abs;
        abs = new ConcreteClassA();
        abs.templateMethod();

        abs = new ConcreteClassB();
        abs.templateMethod();
    }
}
